/*************************************************************************
    > File Name: get_env.c
    > Author:		
    > Mail:		
    > Created Time: 2021年03月22日 星期一 16时17分27秒
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

/* dynamic to see the env, cat /proc/PID/env */
extern char **environ;

void usage(char *progm_name)
{
	printf("Usage: %s env1=x env2=3\n", progm_name);
}

void show_env(void)
{
	char **ep;

	if (!environ)
		return;

	for (ep = environ; *ep != NULL; ep++) {
		puts(*ep);
	}
	sleep(1);
}

int main(int argc, char *argv[])
{

	if (argc < 2) {
		usage(argv[0]);
		goto err;
	}

	show_env();
	clearenv();
	printf("env cleared!\n");

	for (int i = 0; i < argc; i ++) {

		if (putenv(argv[i]) != 0) {
			perror(strerror(errno));
			goto err;
		}
	}
	printf("hook cmdline for env!\n");
	show_env();

	setenv("Hello", "9527", 9);
	unsetenv("BYE");
	printf("Hello=9527 seted, BYE unseted!\n");
	show_env();

	return 0;

err:
	exit(-1);
}
